package cn.wolfcode.wolf2w.service.impl;

import cn.wolfcode.wolf2w.cache.vo.VisitorVo;
import cn.wolfcode.wolf2w.domain.UserInfo;
import cn.wolfcode.wolf2w.domain.Visitor;
import cn.wolfcode.wolf2w.repository.VisitorRepository;
import cn.wolfcode.wolf2w.service.IUserInfoService;
import cn.wolfcode.wolf2w.service.IVisitorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;


@Service
public class VisitorServiceImpl implements IVisitorService{
    @Autowired
    private VisitorRepository visitorRepository;

    @Autowired
    private MongoTemplate mongoTemplate;

    @Autowired
    private IUserInfoService userInfoService;

    @Override
    public Visitor get(String id) {

        return visitorRepository.findById(id).orElse(null);

    }

    @Override
    public List<Visitor> list() {
        return visitorRepository.findAll();
    }

    @Override
    public List<UserInfo> queryForVisitor(String id) {
        // 通过个人中心主页id，获取个人中心对象
        Visitor visitor = visitorRepository.findByOwnerId(id);
        // 获取游客对象的访客id集
        List<String> visitorIds = visitor.getVisitorIds();
        // 创建集合，用来存储遍历出来的游客对象
        List<UserInfo> list = new ArrayList<>();
        for (String vid : visitorIds ){
            // 通过游客访问id获取游客对象
            UserInfo userInfo = userInfoService.get(vid);
            list.add(userInfo);
        }
        return list;
    }

    // 更新保存vo对象数据到mongodb数据库中
    @Override
    public void updateVisitorVo(VisitorVo vo) {
        // 创建查询条件对象
        Query query = new Query();
        // 已ownerId作为查询条件
        query.addCriteria(Criteria.where("ownerId").is(vo.getOwnerId()));
        // 适用于用于部分更新对象中的属性
        Update update = new Update();
        update.set("totalView",vo.getTotalView());
        update.set("visitorIds",vo.getVisitorIds());
        //
        mongoTemplate.updateMulti(query,update,Visitor.class);
    }


}
